Method Generating Principle

C++은 기본적으로 6가지 메서드(C++03에서는 4가지)를 갖는다.

- 디폴트 생성자
- 복사 생성자
- 이동 생성자(C++11 이상)
- 복사 할당 연산자
- 이동 할당 연산자(C++11 이상)
- 소멸자

위의 여섯가지 메서드에 대해서는 가능한 적게 구현하고 최대한 많이 선언하는 것이 좋다.
구현되지 않은 메서드는 “default” 또는 “delete”로 선언되어야 한다.
class example{
private:
int val1=10; // 멤버초기화
int val2=15;
public:
// 디폴트 생성자
example() {}
// 일반 생성자
example(int& val1=0, int& val2=0): val1(val1), val2(val2) {}
// 복사 생성자
example(const example& Lval): val1(Lval.val1), val2(Lval.val2) {}
// 이동 생성자
example(example&& Rval): val1(Rval.val1), val2(Rval.val2) {}
// 복사 할당 연산자
example& operator=(const example& Lval){
val1=Lval.val1;
val2=Lval.val2;
return *this;
}
// 이동 할당 연산자
example& operator=(example&& Rval){
std::swap(val1, Rval.val1);
std::swap(val2, Rval.val2);
return *this;
}
// 소멸자
~example() {}
};
int main(void){
inline example f(int val1, int val2){
example exam1(val1, val2);
return exam1;
}
example instance1; // 디폴트 생성자로 생성
example instance2(instance1); // 복사 생성자 사용
example instance3(f(val1, val2)); // 이동 생성자 사용
example instance4=instance(10, 15); // 복사 할당 연산자
example instance5=f(1, 5); // 이동 할당 연산자
instance1.~example(); // 소멸자 명시적 호출
return 0;
}